<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2006/xpath-functions">
<xsl:output method="text" indent="no"/> 

	<xsl:template match="/">
		<xsl:apply-templates />
	</xsl:template>

	<xsl:template match="MLD">
		<xsl:apply-templates />
		<xsl:apply-templates select="TABLE/ATTRIBUT" mode="alter_fk" /><xsl:text>&#xa;</xsl:text>
	</xsl:template>

	<xsl:template match="TABLE">
		<xsl:text>DROP TABLE IF EXISTS `</xsl:text><xsl:value-of select="@name" /><xsl:text>`;</xsl:text><xsl:text>&#xa;</xsl:text>
		<xsl:text>CREATE TABLE IF NOT EXISTS `</xsl:text><xsl:value-of select="@name" /><xsl:text>` (</xsl:text>
			<xsl:apply-templates select="ATTRIBUT" mode="attributs" />
			<xsl:apply-templates select="ATTRIBUT" mode="pk" />
			<xsl:apply-templates select="ATTRIBUT" mode="fk" /><xsl:text>&#xa;</xsl:text>
		<xsl:text> ) ENGINE=InnoDB  DEFAULT CHARSET=utf8;</xsl:text><xsl:text>&#xa;</xsl:text><xsl:text>&#xa;</xsl:text><xsl:text>&#xa;</xsl:text>
	</xsl:template>
	
	<!-- Corps -->
	<xsl:template match="ATTRIBUT" mode="attributs">
		<xsl:text>&#xa;</xsl:text>
		
		<!-- nom -->
		<xsl:text>`</xsl:text><xsl:value-of select="@nom" /><xsl:text>` </xsl:text>
		
		<!-- type pour l'auto increment -->
		<xsl:choose>
			<xsl:when test="@type='AUTO_INCREMENT'">
				<xsl:text>int </xsl:text>
			</xsl:when>
			<xsl:otherwise>
				<xsl:value-of select="@type" />
			</xsl:otherwise>
		</xsl:choose>
		
		<!-- Required -->
		<xsl:if test="@Required='True'">
			<xsl:text> NOT NULL </xsl:text>
		</xsl:if>
		
		<!-- Foreign Key -->
		<xsl:choose>
			<xsl:when test="@FOREIGN_KEY_OF">
			</xsl:when>
			<xsl:otherwise>
				<xsl:if test="@type='AUTO_INCREMENT'">
					<xsl:value-of select="@type" />
				</xsl:if>
			</xsl:otherwise>
		</xsl:choose>
		
		<xsl:if test="position()!=last()">
            <xsl:text>,</xsl:text>
        </xsl:if>
		
	</xsl:template>
	
	<!-- Cle primaire -->
	<xsl:template match="ATTRIBUT" mode="pk">
		<xsl:choose>
			<xsl:when test="@FOREIGN_KEY_OF">
			</xsl:when>
			<xsl:otherwise>
				<xsl:if test="@PRIMARY_KEY_OF">
            <xsl:text>,</xsl:text><xsl:text>&#xa;</xsl:text>
					<xsl:text>PRIMARY KEY (`</xsl:text>
						<xsl:value-of select="@nom" />
					<xsl:text>`)</xsl:text>
				</xsl:if>
			</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	
	<!-- Cle etrangere -->
	<xsl:template match="ATTRIBUT" mode="fk">
		<xsl:if test="@FOREIGN_KEY_OF">
			<xsl:text>,</xsl:text><xsl:text>&#xa;</xsl:text>
			<xsl:text>KEY `</xsl:text><xsl:value-of select="@nom" /><xsl:text>` (`</xsl:text>
			<xsl:value-of select="@nom" /><xsl:text>`)</xsl:text>
		</xsl:if>
	</xsl:template>
	
	<!-- Alter table for Foreign keys -->
	<xsl:template match="ATTRIBUT" mode="alter_fk">
		
	
		<xsl:if test="@FOREIGN_KEY_OF">
			<xsl:text>&#xa;</xsl:text><xsl:text>ALTER TABLE `</xsl:text><xsl:value-of select="../@name" /><xsl:text>` </xsl:text>
			<xsl:text>ADD CONSTRAINT  `</xsl:text><xsl:value-of select="../@name" /><xsl:text>_</xsl:text><xsl:value-of select="@FOREIGN_KEY_OF" /><xsl:text>_fk_</xsl:text><xsl:value-of select="position()" /><xsl:text>` </xsl:text> 
			<xsl:text>FOREIGN KEY (`</xsl:text><xsl:value-of select="@nom" /><xsl:text>`) </xsl:text>
			<xsl:text>REFERENCES `</xsl:text><xsl:value-of select="@FOREIGN_KEY_OF" /><xsl:text>` </xsl:text>
			<xsl:text>(`</xsl:text><xsl:value-of select="@nom" /><xsl:text>`);</xsl:text><xsl:text>&#xa;</xsl:text>
		</xsl:if>
	</xsl:template>
	
</xsl:stylesheet>
